A memory controller provides user logic with read and write access to data stored in a memory device. For example, user logic may send a user command to the memory controller. The memory controller may convert the user command into one or more memory controller commands. The one or more memory controller commands may be sent to the memory to read or write the data.
A memory controller may be implemented on a Programmable Logic Device (PLD) as well as other kinds of devices implemented on integrated circuits. Where a memory controller is implemented using the basic building block logic elements generally provided on a PLD, the memory controller is commonly referred to as a soft memory controller.
In contrast, to facilitate a user's implementation of a memory controller, a PLD may be designed to contain a specialized block of circuitry dedicated to implementing a memory controller. Such circuitry may be described as a memory controller block, and replaces the usual circuitry that would appear in that section of the PLD. A memory controller implemented using such specialized circuitry (i.e., a memory controller block) is commonly referred to as a hardened memory controller. With a hardened memory controller, to implement a memory controller in the field, a user requests a memory controller in the course of programming the PLD, and a memory controller is instantiated in the memory controller block at compile time.